<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<![endif]-->
<title>VIM 中文用户手册: 编辑带格式的文本</title>
<link rel="stylesheet" href="vim-stylesheet.css" type="text/css" />
<link rel="canonical" href="https://yianwillis.github.io/vimcdoc/doc/usr_25.html" />
<script type="text/javascript" src="vimcdoc.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<nav id=banner>
<form action=tags.html target="tag_iframe">
  <input type="text" name="tag" id="tag" placeholder="标签搜索">
</form>
<iframe name="tag_iframe" src=""></iframe>
<a href="help.html">帮助总览</a> &middot;
<hr/>
<a href="quickref.html">快速参考</a> &middot;
<a href="index.html">命令索引</a> &middot;
<a href="eval.html#functions">函数列表</a> &middot;
<a href="quickref.html#option-list">选项列表</a> &middot;
<hr/>
<a href="usr_toc.html">用户手册</a> &middot;
<a href="help.html#reference_toc">参考手册</a> &middot;
</nav>

<header>
<h2>usr_25</h2>
</header>
<article id=outer>
<section class=inner>
<b class="vimtag"> <a name="usr_25.txt">usr_25.txt</a> </b>    适用于 Vim 9.0 版本。   最近更新: 2020年1月

                     <code class="vim">VIM 用户手册 - by Bram Moolenaar</code>
                                <code class="vim">译者</code>: snoopyxp

                           编辑带格式的文本


很少有那种一行一个句子的文本。这一章我们将要介绍如何为了适合页面而为句子分行以
及进行其它的编排操作。当然，针对编辑单行的段落和表格，Vim 也有一些有用的特性。

 <a href="usr_25.html#25.1">25.1</a>   断行
 <a href="usr_25.html#25.2">25.2</a>   对齐文本
 <a href="usr_25.html#25.3">25.3</a>   缩进和制表符
 <a href="usr_25.html#25.4">25.4</a>   对长行的处理
 <a href="usr_25.html#25.5">25.5</a>   编辑表格

        下一章:  <a href="usr_26.html#usr_26.txt">usr_26.txt</a>    重复
        前一章:  <a href="usr_24.html#usr_24.txt">usr_24.txt</a>    快速插入
          目录:  <a href="usr_toc.html#usr_toc.txt">usr_toc.txt</a> 

</section><hr class="doubleline" /><section class=inner>
<h4><b class="vimtag"> <a name="25.1">25.1</a> </b>  断行</h4>
Vim 有一系列功能可以使处理文本变得更容易。在默认情况下，Vim 并不会自动换行，换
句话说，你得自己敲 <code class="special">&lt;Enter&gt;</code>。这在你编写程序并想自己决定哪里是行尾时会很有用。但
当你想建立一个每行至多有 70 个字符宽的文档时，这就显得没那么好了。
    如果你设置了 <a href="options.html#'textwidth'">'textwidth'</a> 选项，Vim 就会自动插入换行符。举个例子，假设您想
要一个只有 30 个字符宽的非常窄的栏，你需要执行下面的命令: 
<code class="example"></code>
<code class="example">        :set textwidth=30</code>
<code class="example"></code>
现在开始输入正文 (加入了标尺):

                 1         2         3
        12345678901234567890123456789012345
<code class="section">        I taught programming for a whi </code>

如果接下来你输入 "l"，这将使此行的长度超出 30 个字符的限制。当 Vim 发现这种情
况时，它会自动插入换行符。你将得到下面的结果:

                 1         2         3
        12345678901234567890123456789012345
<code class="section">        I taught programming for a </code>
<code class="section">        whil </code>

接着，你可以输入剩下的段落:

                 1         2         3
        12345678901234567890123456789012345
<code class="section">        I taught programming for a</code>
<code class="section">        while. One time, I was stopped</code>
<code class="section">        by the Fort Worth police,</code>
<code class="section">        because my homework wos too</code>
<code class="section">        hard. True story.</code>

你不用输入换行符，Vim 会自动插入的。

        <code class="note">备注</code>:
        <a href="options.html#'wrap'">'wrap'</a> 选项会使 Vim 分行显示文本，但并不会在文件中插入换行符。


重 排 文 本

Vim 编辑器并不是一个字处理器。字处理器在你删除了段落开头的一些东西时会重新调整
换行符。(<code class="vim">译者注</code>: 这意味着后边的文本会向前补进，使换行位置保持不变)。但在 Vim
里并不是这样。因此，当你从第一行删除单词 "programming" 时，你所得到的只是一个
短行:

                 1         2         3
        12345678901234567890123456789012345
<code class="section">        I taught for a</code>
<code class="section">        while. One time, I was stopped</code>
<code class="section">        by the Fort Worth police,</code>
<code class="section">        because my homework was too</code>
<code class="section">        hard. True story.</code>

这看起来不大美观。为了保持段落的形状，你要用到 "gq" 操作符。
    下面我们首先结合一个可视选择区来使用它。从第一行开始，键入: 
<code class="example"></code>
<code class="example">        v4jgq</code>
<code class="example"></code>
"v" 用来进入可视模式，"4j" 用来移动到段落结尾，接下来是 "gq" 操作符。下面是得
到的结果:

                 1         2         3
        12345678901234567890123456789012345
<code class="section">        I taught for a while. One </code>
<code class="section">        time, I was stopped by the </code>
<code class="section">        Fort Worth police, because my </code>
<code class="section">        homework was too hard. True </code>
<code class="section">        story. </code>

<code class="note">备注</code>: 有一种方法可以自动地排版特定文本类型的布局，参见  <a href="change.html#auto-format">auto-format</a> 。

因为 "gq" 是一个操作符，所以你可以通过下面三种方法之一来选择要操作的文本范围:
可视模式，一个移动操作，或是一个文本对象。
    上面的例子也可以用 "gq4j" 来完成。这减少了击键次数，但你得知道行数。一个更
有用的移动命令是 "}"。使用这个命令可以移动到一个段落的结尾处。因此，"gq}" 将对
从当前光标处至当前段段尾所包括的文本进行排版操作。
    可以和 "gq" 一起使用的一个很有用的文本对象是段落。试一下这个: 
<code class="example"></code>
<code class="example">        gqap</code>
<code class="example"></code>
"ap" 意味着 "a-paragraph" (<code class="vim">译者注</code>: 一个段落)。这将对一个段落 (用空行隔开) 的文
本进行排版操作。也包括在光标之前的部分。
    如果你所有的段落都已经用空行分隔好了，你可以键入以下命令来对整个文件进行格
式化操作: 
<code class="example"></code>
<code class="example">        gggqG</code>
<code class="example"></code>
"gg" 用来移动到第一行，"gqG" 用来对文本进行排版操作直到最后一行。
    <code class="note">警告</code>: 如果你的段落没有被正确的分隔开，它们将被连接在一起。一个常见的错误是
文件内包含一些只有空格或制表符的行。这些是空白行，但不是空行。

Vim 并不是只能对纯文本进行排版操作。请参考  <a href="change.html#fo-table">fo-table</a>  一节获取更详细的信息。参
考 <a href="options.html#'joinspaces'">'joinspaces'</a> 选项以了解如何改变在句号之后加入的空格数。
   也可以调用外部程序来做排版。这在 Vim 自带的排版功能无法满足你的文本的需要时
很有用。参阅 <a href="options.html#'formatprg'">'formatprg'</a> 选项。

</section><hr class="doubleline" /><section class=inner>
<h4><b class="vimtag"> <a name="25.2">25.2</a> </b>  对齐文本</h4>
要使一定范围包括的行居中，用以下命令: 
<code class="example"></code>
<code class="example">        :{range}center [width]</code>
<code class="example"></code>
<code class="special">{range}</code> 即是那些通常命令所能指定的范围。 <code class="special">[width]</code> 是一个可选项，用来确定要居中
的行的宽度。如果没有指定 <code class="special">[width]</code>，则默认使用 <a href="options.html#'textwidth'">'textwidth'</a> 的值。(如果
<a href="options.html#'textwidth'">'textwidth'</a> 是 0，则默认为 80。)
    例如: 
<code class="example"></code>
<code class="example">        :1,5center 40</code>
<code class="example"></code>
将得到下面的结果:

<code class="section">       I taught for a while. One </code>
<code class="section">       time, I was stopped by the </code>
<code class="section">     Fort Worth police, because my </code>
<code class="section">      homework was too hard. True </code>
<code class="section">                 story. </code>

右 对 齐

类似地，":right" 命令将使文本右对齐: 
<code class="example"></code>
<code class="example">        :1,5right 37</code>
<code class="example"></code>
将得到这种结果:

<code class="section">            I taught for a while. One </code>
<code class="section">           time, I was stopped by the </code>
<code class="section">        Fort Worth police, because my </code>
<code class="section">          homework was too hard. True </code>
<code class="section">                               story. </code>

左 对 齐

我们使用这个命令: 
<code class="example"></code>
<code class="example">        :{range}left [margin]</code>
<code class="example"></code>
和 ":center" ":right" 不同的是，":left" 的参数并不是行的宽度，而是左边的页边
距。如果这个参数被省略了，文本将被紧靠在屏幕的左边缘 (用一个零页边距参数将得
到一样的效果)。如果页边距是 5，文本将缩进五个空格。举个例子，使用以下命令: 
<code class="example"></code>
<code class="example">        :1left 5</code>
<code class="example">        :2,5left</code>
<code class="example"></code>
结果会是下面这样:

<code class="section">             I taught for a while. One </code>
<code class="section">        time, I was stopped by the </code>
<code class="section">        Fort Worth police, because my </code>
<code class="section">        homework was too hard. True </code>
<code class="section">        story. </code>


两 端 对 齐

Vim 并没有提供内建的方法来使文本两端对齐。不过，我们可以通过使用一个灵巧的宏来
做这项工作。要使用这个包，执行下列命令: 
<code class="example"></code>
<code class="example">        :packadd justify</code>
<code class="example"></code>
或在 .vimrc 里放上之行: 
<code class="example"></code>
<code class="example">        packadd! justify</code>
<code class="example"></code>
这个 Vim 脚本文件定义了一个新的可视命令 "_j"。要使一块文本两端对齐，只需在可视
模式中选择该文本块，然后执行 "_j"。
   请查阅该文件以获得更详细的解释说明。在文件名
$VIMRUNTIME/pack/dist/opt/justify/plugin/justify.vim 上键入命令 "gf"，就可以打
开该文件。

作为另一个选择，你还可以使用一个外部程序来对文本进行过滤。例如: 
<code class="example"></code>
<code class="example">        :%!fmt</code>
<code class="example"></code>
</section><hr class="doubleline" /><section class=inner>
<h4><b class="vimtag"> <a name="25.3">25.3</a> </b>  缩进和制表符</h4>
缩进可以被用来突显特定的文本。举个例子，在本手册的示例文本用八个空格或一个制表
符来缩进。通常，你可以在每行的开头键入一个制表符来输入下面内容。用这个文本:
<code class="section">        the first line </code>
<code class="section">        the second line </code>

这些文本是这样输入的，先输入一个制表符，再输入一些文本，然后键入 <code class="special">&lt;Enter&gt;</code>，接着
又是一个制表符，然后输入另一些文本。
    置位 <a href="options.html#'autoindent'">'autoindent'</a> 选项可以自动插入缩进: 
<code class="example"></code>
<code class="example">        :set autoindent</code>
<code class="example"></code>
当开始一个新行时，新行会采用和上一行相同的缩进。在上面的例子中，我们再也不需要
在 <code class="special">&lt;Enter&gt;</code> 后面输入制表符了。


增 加 缩 进

要增加一行中的缩进量，可以使用 "&gt;" 操作符。一个经常使用的操作是 "&gt;&gt;"，这将为当
前行增加缩进。
    增加的缩进量是使用 <a href="options.html#'shiftwidth'">'shiftwidth'</a> 来指定的。默认的值是 8。举例来说，要使
"&gt;&gt;" 插入四个空格宽度的缩进，键入: 
<code class="example"></code>
<code class="example">        :set shiftwidth=4</code>
<code class="example"></code>
当你在示例文本中的第二行上使用时，你会得到下面的结果:

<code class="section">        the first line </code>
<code class="section">            the second line </code>

"4&gt;&gt;" 将为四行增加缩进。


制 表 位

如果你想使缩进量为 4 的倍数，你需把 <a href="options.html#'shiftwidth'">'shiftwidth'</a> 设置为 4。但是当你敲下 <code class="special">&lt;Tab&gt;</code>
键时，你仍然会得到八个空格宽度的缩进。要改变这种情况，请设置 <a href="options.html#'softtabstop'">'softtabstop'</a> 选
项。 
<code class="example"></code>
<code class="example">        :set softtabstop=4</code>
<code class="example"></code>
这将使 <code class="special">&lt;Tab&gt;</code> 键插入四个空格宽度值的缩进量。如果已经存在四个空格，就加上一个
<code class="special">&lt;Tab&gt;</code> 字符 (在文件中省去了七个字符)。(如果你只想要空格而不想加上 tab 字符，请
置位 <a href="options.html#'expandtab'">'expandtab'</a> 选项。)

        <code class="note">备注</code>:
        你可以把 <a href="options.html#'tabstop'">'tabstop'</a> 选项设置为 4。尽管如此，如果你在另一个时间再次编辑
        这个文件时 <a href="options.html#'tabstop'">'tabstop'</a> 的默认值是 8，文件缩进看起来会不对。在其它程序中
        或者在打印的时候，缩进也将是错的。因此，建议把 <a href="options.html#'tabstop'">'tabstop'</a> 的值始终保持
        为 8。这是所有地方的标准值。


更 换 制 表 位

当你在 Vim 中编辑一个 tabstop 为 3 的文件时，文件会看起来很难看，因为在 Vim 中
tabstop 的正常值为 8。你可以通过把 <a href="options.html#'tabstop'">'tabstop'</a> 的值设置为 3 来更正它。但是你每一
次你编辑这个文件都得做这个更改。
    Vim 可以更换你文件使用的制表位。首先，设置 <a href="options.html#'tabstop'">'tabstop'</a> 的值使缩进看起来美
观，然后使用 ":retab" 命令: 
<code class="example"></code>
<code class="example">        :set tabstop=3</code>
<code class="example">        :retab 8</code>
<code class="example"></code>
":retab" 命令将把 <a href="options.html#'tabstop'">'tabstop'</a> 的值改为 8，同时仍保持文件看起来不变。它把空白区间
用制表和空格重新构造。现在你可以写入这个文件。下次你再编辑它的时候缩进将是正确
的，你不需要改变任何选项。
    <code class="note">警告</code>: 当你对一个程序文件使用 ":retab" 命令时，它可能会改变一个字符串常量中
的空白。因此，要养成在程序中使用 "\t" 而不是输入一个制表符的好习惯。

</section><hr class="doubleline" /><section class=inner>
<h4><b class="vimtag"> <a name="25.4">25.4</a> </b>  对长行的处理</h4>
有时你会编辑一个比窗口列数宽的文件。当发生这种情况时，Vim 将把文件行回绕显示以
便适应屏幕显示。
    如果你将 <a href="options.html#'wrap'">'wrap'</a> 选项设置为关闭，文件中的每一行都将在屏幕上仅作为一行显示。
这时行尾会超出屏幕右端从而无法看到。
    当你移动光标到视野之外的字符时，Vim 将滚动文本来显示它。这就好像在文本的水
平方向移动视窗一样。
    默认情况下，Vim 并不在 GUI 中显示水平滚动条。如果你想启用它，使用下面的命
令: 
<code class="example"></code>
<code class="example">        :set guioptions+=b</code>
<code class="example"></code>
一个水平滚动条将出现在 Vim 窗口的底部。

如果你没有滚动条或者你不想使用它，可以用下面这些命令来滚动文本。光标将停留在同
样的地方，但在必要时会回移到可见文本区。

        zh              向右滚动
        4zh             向右滚动四个字符
        zH              向右滚动半个窗口宽度
        ze              向右滚动使光标处于行尾
        zl              向左滚动
        4zl             向左滚动四个字符
        zL              向左滚动半个窗口宽度
        zs              向左滚动使光标处于行首

让我们试着用一行文本来演示一下。光标停留在 "which" 的 "w" 处。那行上方的 "当前
窗口" 标示当前可见的文本。下方的 "窗口" 指示了执行了左边的命令后可见的文本区
域。

                              |&lt;--    当前窗口    --&gt;|
<code class="section">                some long text, part of which is visible in the window</code>
        ze        |&lt;--      窗口      --&gt;|
        zH         |&lt;--      窗口      --&gt;|
        4zh               |&lt;--      窗口      --&gt;|
        zh                   |&lt;--      窗口      --&gt;|
        zl                     |&lt;--      窗口      --&gt;|
        4zl                       |&lt;--      窗口      --&gt;|
        zL                              |&lt;--      窗口      --&gt;|
        zs                             |&lt;--      窗口      --&gt;|


在 关 闭 折 行 情 况 下 移 动

当 <a href="options.html#'wrap'">'wrap'</a> 选项被关闭，文本将在水平方向卷动。你可以通过以下命令来使光标移动到你
可以看到的一个字符处。这样超出窗口左右两端的文本将被忽略。这些命令不会使文本卷
动:

        g0              移动到当前行的第一个可见字符
        g^              移动到当前行的第一个非空白的可见字符
        gm              移动到屏幕行的中点
        gM              移动到当前行的文本中点
        g$              移动到当前行的最后一个可见字符

                |&lt;--       窗口      --&gt;|
<code class="section">        some long    text, part of which is visible in one line </code>
                 g0  g^    gm      gM g$


断 词                                           <b class="vimtag"> <a name="edit-no-break">edit-no-break</a> </b>

当你为另一个程序准备文本时，你或许需要使段落没有一处换行。使用 <a href="options.html#'nowrap'">'nowrap'</a> 选项的
一个弊端是你看不见你正在处理的整个句子。当 <a href="options.html#'wrap'">'wrap'</a> 选项开启时，会从单词中间断
开，从而难以阅读。
    编辑此类段落时，一个好的解决方法是设置 <a href="options.html#'linebreak'">'linebreak'</a> 选项。这样，Vim 将会在
一个适当的地方回绕行显示，同时仍保持文件中的文本不变。
    没有设置 <a href="options.html#'linebreak'">'linebreak'</a> 选项时的文本看起来可能是这样:

        +---------------------------------+
        |letter generation program for a b|
        |ank.  They wanted to send out a s|
        |pecial, personalized letter to th|
        |eir richest 1000 customers.  Unfo|
        |rtunately for the programmer, he |
        +---------------------------------+
使用如下命令之后: 
<code class="example"></code>
<code class="example">        :set linebreak</code>
<code class="example"></code>
看起来会是这样:

        +---------------------------------+
        |letter generation program for a  |
        |bank.  They wanted to send out a |
        |special, personalized letter to  |
        |their richest 1000 customers.    |
        |Unfortunately for the programmer,|
        +---------------------------------+

相关选项:
<a href="options.html#'breakat'">'breakat'</a> 指定了可以用来作为插入换行地点的字符。
<a href="options.html#'showbreak'">'showbreak'</a> 指定了一个用于显示在回绕行显示行的行首的字符串。
设置 <a href="options.html#'textwidth'">'textwidth'</a> 的值为零来避免一个段落被拆分。


在 可 见 行 间 移 动

使用 "j" 和 "k" 命令可以移动到下一行和上一行。当作用于一个长行时，这通常意味着
要一次移动许多屏幕行。
    使用 "gj" 和 "gk" 命令可以只移动一个屏幕行。当一行没有回绕时，它们和 "j"
和 "k" 命令所起的作用一样。当一行回绕时，它们将在屏幕上显示的上一行和下一行的
一个字符之间移动。
    下面这些移动命令的键映射也许对你有用: 
<code class="example"></code>
<code class="example">        :map &lt;Up&gt; gk</code>
<code class="example">        :map &lt;Down&gt; gj</code>
<code class="example"></code>
<code class="example"></code>
变 段 为 行                                             <b class="vimtag"> <a name="edit-paragraph-join">edit-paragraph-join</a> </b>

如果你想把文本导入类似 MS-Word 的程序中，每个段落就要变成一个单行。如果你的段
落是由空行分隔开的，下面这个命令就可以要把一个段转化为一个单行: 
<code class="example"></code>
<code class="example">        :g/./,/^$/join</code>
<code class="example"></code>
这看起来挺复杂。让我们把它分解开:

        :g/./           一个 ":global" 命令，用来搜索至少含一个字符的所有行。
             ,/^$/      一个范围，从当前行开始 (非空行) 到一个空行。
                  join  ":join" 命令把范围内的行连接成一行。

从下面这段含有八行，且在第三十列换行的文本开始:

        +----------------------------------+
        |A letter generation program       |
        |for a bank.  They wanted to       |
        |send out a special,               |
        |personalized letter.              |
        |                                  |
        |To their richest 1000             |
        |customers.  Unfortunately for     |
        |the programmer,                   |
        +----------------------------------+

你将得到下面两行:

        +----------------------------------+
        |A letter generation program for a |
        |bank.  They wanted to send out a s|
        |pecial, personalized letter.      |
        |To their richest 1000 customers.  |
        |Unfortunately for the programmer, |
        +----------------------------------+

<code class="note">注意</code> 当分隔段落的行是含有空格和/或制表符的空白行而不是空行时，这行命令将不起作
用。下列的命令对于空白行仍起作用:

<code class="example">        :g/\S/,/^\s*$/join</code>
<code class="example"></code>
要使最后一段也被连接，这行命令需要文件的结尾仍有一个空白行或空行。

</section><hr class="doubleline" /><section class=inner>
<h4><b class="vimtag"> <a name="25.5">25.5</a> </b>  编辑表格</h4>
设想你正在编辑一个含有四列的表格:

<code class="section">        nice table        test 1        test 2      test 3 </code>
<code class="section">        input A           0.534 </code>
<code class="section">        input B           0.913 </code>

你需要在第三列输入数字。你可以先移动到第二行，键入 "A"，键入一大堆空格然后输入
你要输入的文本。
    对于这种类型的编辑操作有一个特殊的选项: 
<code class="example"></code>
<code class="example">        set virtualedit=all</code>
<code class="example"></code>
现在你可以把光标移动到没有任何文本的位置。这叫做 "虚拟空间"。通过这种方法，编
辑表格变得容易很多。
    通过查找最后一列的标题来移动光标: 
<code class="example"></code>
<code class="example">        /test 3</code>
<code class="example"></code>
现在按下 "j"，光标就到了你要输入对应 "input A" 的值的地方了。输入 "0.693"，结
果是:

<code class="section">        nice table        test 1     test 2      test 3 </code>
<code class="section">        input A           0.534                  0.693 </code>
<code class="section">        input B           0.913 </code>

Vim 已经自动为你填充了新文本前面的间隙。现在，要到此列的下一个域，键入 "Bj"。
"B" 用来反向移动到空白间隔的单词的开始处。然后，用 "j" 移动到可以输入下一域的
地方。

        <code class="note">备注</code>:
        你可以把光标移动到窗口的任何地方，也可以超出行尾。但是，Vim 在你未在该
        位置插入字符之前并不会插入空格。


拷 贝 一 列

你想增加一列，它是第三列的一个拷贝，并且想放在 "test 1" 列的前面。做以下七步:
1.  移动光标到这一列的左上角，例如用 "/test 3"。
2.  按 <code class="keystroke">CTRL-V</code> 来开启可视列块模式。
3.  用 "2j" 使光标向下移动两行。你现在进入了 "虚拟空间": "input B" 行中对应对
    应列 "test 3" 的地方。
4.  把光标向右移动来选择整列，外加那些你想要的列之间的空格。用 "9l" 就行。
5.  用 "y" 来拷贝矩形选择区的内容。
6.  把光标移动到我们需要插入新列的地方 "test 1"。
7.  按下 "P"。

结果应该是:

<code class="section">        nice table        test 3    test 1     test 2      test 3 </code>
<code class="section">        input A           0.693     0.534                  0.693 </code>
<code class="section">        input B                     0.913 </code>

需要<code class="note">注意</code>的是整个 "test 1" 列被向右移动了，同时也包括 "test 3" 列中没有文本的
行。

要返回到光标的非虚拟移动模式，用: 
<code class="example"></code>
<code class="example">        :set virtualedit=</code>
<code class="example"></code>
<code class="example"></code>
虚 拟 替 换 模 式

使用 <a href="options.html#'virtualedit'">'virtualedit'</a> 的弊端是你会 "感觉" 不太一样。当你移动光标的时候，你不能分
辨超出行尾的制表符或空格。另一种可行的方法是: 虚拟替换模式。
   设想在表格中有一个包含了制表符和其它字符的行。在第一个制表符上使用 "rx":

<code class="section">        inp     0.693   0.534   0.693 </code>

               |
           rx  |
               V

<code class="section">        inpx0.693   0.534       0.693 </code>

版面被弄乱了。要避免这种情况，使用 "gr" 命令:

<code class="section">        inp     0.693   0.534   0.693 </code>

               |
          grx  |
               V

<code class="section">        inpx    0.693   0.534   0.693 </code>

这里的情况是 "gr" 命令确保了新字符占据了正确的屏幕空间。额外需要的空格或制表符
被插入到间隙中。然而，真正发生的是一个制表符被一个 "x" 代替，然后空白字符被加
上来使文本保持它的位置。在这个例子里是插入了一个制表符。
   当你需要替换多于一个字符时，使用 "R" 命令来进入替换模式 (参看  <a href="usr_04.html#04.9">04.9</a> )。这样
一来，原来的版面乱套了，而且替换了不该换的字符。

<code class="section">        inp     0       0.534   0.693 </code>

                |
         R0.786 |
                V

<code class="section">        inp     0.78634 0.693 </code>

"gR" 使用虚拟替换模式。这保全了版面布局:

<code class="section">        inp     0       0.534   0.693 </code>

                |
        gR0.786 |
                V

<code class="section">        inp     0.786   0.534   0.693 </code>

</section><hr class="doubleline" /><section class=inner>
<h4></h4>下一章:  <a href="usr_26.html#usr_26.txt">usr_26.txt</a>   重复

版权: 参见  <a href="usr_01.html#manual-copyright">manual-copyright</a>   vim:tw=78:ts=8:noet:ft=help:norl:
</section>
</article>
<footer>
Generated by vim2html
</footer>
</body>
</html>
